﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Projeto
{
    class Animacao
    {
        // 1. Qual a textura e suas definições (Posição, textura, etc.)
        Texture2D textura;
        float escala;
        Color cor;
        public Vector2 posicao;

        // 2. Controle das frames (Tempo)
        int tempoDecorridoFrame;
        int tempoFrame;
        int quantasFrames;
        int frameAtual;

        // 3. Controle das frames (Tamanho, posição, etc.)
        Rectangle frame = new Rectangle();
        Rectangle totalFrame = new Rectangle();
        public int larguraFrame;
        public int alturaFrame;

        public void Inicializacao
                                    (
                                        Texture2D textura,
                                        Vector2 posicao,
                                        int larguraFrame,
                                        int alturaFrame,
                                        int quantasFrames,
                                        int tempoFrame,
                                        Color cor,
                                        float escala)
        {
            // Determina os valores das variáveis que serão 
            // utilizadas no jogo (globais);
            this.cor = cor;
            this.larguraFrame = larguraFrame;
            this.alturaFrame = alturaFrame;
            this.quantasFrames = quantasFrames;
            this.tempoFrame = tempoFrame;
            this.escala = escala;
            this.posicao = posicao;
            this.textura = textura;

            // 2. Zera os valores de tempo decorrido e frame atual
            tempoDecorridoFrame = 0;
            frameAtual = 0;
        }

        public void Atualizacao(GameTime tempoJogo)
        {
            // Aumento do tempo decorrido de cada frame.            
            // Algoritimo para verificar quando realizar animação
                tempoDecorridoFrame += (int)tempoJogo.ElapsedGameTime.TotalMilliseconds;

                if (tempoDecorridoFrame > tempoFrame)
                {
                    frameAtual++;
                    if (frameAtual == quantasFrames)
                    {
                        frameAtual = 0;
                    }
                
                    tempoDecorridoFrame = 0;
                }

            frame = new Rectangle(
                                    frameAtual * larguraFrame,
                                    0,
                                    larguraFrame,
                                    alturaFrame);
            totalFrame = new Rectangle(
                                        (int)posicao.X - (int)(larguraFrame * escala) / 2,
                                        (int)posicao.Y - (int)(alturaFrame * escala) / 2,
                                        (int)(larguraFrame * escala),
                                        (int)(alturaFrame * escala));
           
        }

        public void Desenhar(SpriteBatch dispositivoGrafico)
        {
            dispositivoGrafico.Draw(textura, totalFrame, frame, cor);
        }
    }
}
